/**
 * 
 */
package br.flf.webchat.mbean;

import br.flf.webchat.entidades.Cliente;
import br.flf.webchat.excecoes.NegocioException;
import br.flf.webchat.mbean.utils.StatusAtendimento;
import br.flf.webchat.mbean.utils.TipoRetorno;
import br.flf.webchat.negocio.IControleAtendimentoClienteBO;
import br.flf.webchat.negocio.factory.NegocioFactory;

/**
 * @author Nathan
 * 
 */
public class UsuarioBean extends BaseBean {

	// -------------------------------------------Constantes
	/**
	 * Generated SerialVersion UID.
	 */
	private static final long serialVersionUID = 1815342303491729749L;
	// --------------------------------------------Atributos

	private Cliente cliente;

	// -------------------------------------Metodos Publicos
	public TipoRetorno prepararAtendimento() {

		return TipoRetorno.SUCESSO;
	}

	public TipoRetorno cadastrarClienteAtendimento() {

		
		try {
			getControleAtendimentoClienteBO().cadastrarClienteParaAtendimento(
					cliente);
		} catch (NegocioException e) {
			adicionarMensgemDeErro(e.getMessage());
			return TipoRetorno.ERRO;
		}

		adicionarMensgemDeAlerta("Por favor, espere ate que um dos nossos atendentes esteja disponivel.");

		return TipoRetorno.SUCESSO;
	}

	public String verificarChatPronto() {

		if (!StatusAtendimento.INICIADO.equals(getCliente()
				.getStatusAtendimento())) {
			adicionarMensgemDeAlerta("Por favor, espere ate que um dos nossos atendentes esteja disponivel.");

			return "esperar";
		}
		return "chatPronto";
	}

	public String cancelarAtendimento() {
		getControleAtendimentoClienteBO().cancelarAtendimento(cliente);
		adicionarMensgemDeAlerta("Atendimento cancelado.");
		return "cancelar";
	}

	// -------------------------------------Metodos Privados
	// ----------------------------------------Gets and Sets

	public Integer getPosicaoCliente() {
		return NegocioFactory.getControleAtendimentoClienteBO()
				.obterPosicaoCliente(cliente) + 1;
	}

	/**
	 * @return the controleAtendimentoClienteBO
	 */
	public IControleAtendimentoClienteBO getControleAtendimentoClienteBO() {

		return NegocioFactory.getControleAtendimentoClienteBO();
	}

	/**
	 * @return the cliente
	 */
	public Cliente getCliente() {
		if (cliente == null) {
			cliente = new Cliente();
		}
		return cliente;
	}

	/**
	 * @param cliente
	 *            the cliente to set
	 */
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

}
